//package com.yilong.springcloudalibabanacos.sys.config;
//
//import org.redisson.Redisson;
//import org.redisson.api.RedissonClient;
//import org.redisson.codec.JsonJacksonCodec;
//import org.redisson.config.BaseConfig;
//import org.redisson.config.ClusterServersConfig;
//import org.redisson.config.Config;
//import org.redisson.config.SentinelServersConfig;
//import org.redisson.config.SingleServerConfig;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Import;
//import org.springframework.util.StringUtils;
//
///**
// * @version 1.0.0
// * @项目名称: com.yilong.springcloudalibabanacos.sys.config
// * @类名称: RedissonClientConfig
// * @类描述: #服务类
// * @功能描述: 功能描述
// * @创建人: WYL
// * @创建时间: 2022-8-15 22:02:45
// * @修改备注: 对该类进行修改时备注该处
// * @修改记录: 修改时间 修改人员 修改原因
// * -----------------------------------------------------
// * @Copyright (c) 宇信科技-版权所有
// */
//
//@Configuration
//@ConditionalOnMissingBean(RedissonClient.class)
//@Import(RedissonClientConfig.RedissonConfig.class)
//public class RedissonClientConfig {
//
//
//    private final Config config;
//
//    RedissonClientConfig(Config config) {
//        this.config = config;
//    }
//
//    @Bean
//    public RedissonClient redissonClient() {
//        return Redisson.create(config);
//    }
//
//    @ConditionalOnMissingBean(Config.class)
//    @EnableConfigurationProperties({RedisProperties.class})
//    static class RedissonConfig {
//
//        @Autowired
//        private RedisProperties redisProperties;
//
//        @Bean
//        public Config redissonConfig() {
//            Config config = new Config();
//            //哨兵模式
//            if (redisProperties.getSentinel() != null) { //sentinel
//                SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
//                RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
//                sentinelServersConfig.setMasterName(sentinel.getMaster());
//                sentinelServersConfig.addSentinelAddress(sentinel.getNodes().toArray(new String[sentinel.getNodes().size()]));
//                sentinelServersConfig.setDatabase(redisProperties.getDatabase());
//                baseConfig(sentinelServersConfig, redisProperties);
//                //集群模式
//            } else if (redisProperties.getCluster() != null) { //cluster
//                ClusterServersConfig clusterServersConfig = config.useClusterServers();
//                RedisProperties.Cluster cluster = redisProperties.getCluster();
//                clusterServersConfig.addNodeAddress(cluster.getNodes().toArray(new String[cluster.getNodes().size()]));
//                clusterServersConfig.setFailedSlaveReconnectionInterval(cluster.getMaxRedirects());
//                baseConfig(clusterServersConfig, redisProperties);
//
//                //普通模式
//            } else { //single server
//                SingleServerConfig singleServerConfig = config.useSingleServer();
//                // format as redis://127.0.0.1:7181 or rediss://127.0.0.1:7181 for SSL
//                String schema = redisProperties.isSsl() ? "rediss://" : "redis://";
//                singleServerConfig.setAddress(schema + redisProperties.getHost() + ":" + redisProperties.getPort());
//                singleServerConfig.setDatabase(redisProperties.getDatabase());
//                baseConfig(singleServerConfig, redisProperties);
//            }
//            config.setCodec(new JsonJacksonCodec());
//            return config;
//        }
//
//        private void baseConfig(BaseConfig config, RedisProperties properties) {
//            if (StringUtils.hasText(properties.getPassword())) {
//                config.setPassword(properties.getPassword());
//            }
//            if (properties.getTimeout() != null) {
//                config.setTimeout(Long.valueOf(properties.getTimeout().getSeconds() * 1000).intValue());
//            }
//            if (StringUtils.hasText(properties.getClientName())) {
//                config.setClientName(properties.getClientName());
//            }
//        }
//    }
//
//    public static void main(String[] args) {
//
//    }
//
//}
